package org.opens.javaskill.lombok;

import lombok.*;

import java.util.Date;

/**
 * 说明:
 *      1. @NoArgsConstructor表示创建一个无参构造器, 否则会使在创建对象时报错没有无参构造器,
 *          - 这是因为@Date默认包含了全参构造器, java的默认规则是:
 *              1. 如果一个类没有构造器, 则编译器会给这个类添加一个默认的无参构造器;
 *              2. 如果这个类一应有一个任意构造器, 那编译器就不会去帮助添加, 需要手动添加了;
 *      2. @Builder可以使该类可以更优雅的使用'构造器模式'进行创建对象.
 *          - 需要注意的是, 如果使用@Builder模式创建对象, 就不要使用@Data注解了, 因为会报异常, 具体原理还不清楚.
 *          - 手动指定全参构造器注解时, 需要指定修饰符access = AccessLevel.PRIVATE, 就是将全参构造器的构造私有.
 */
@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class BuilderDefaultEntity {

    private Integer id;

    @Builder.Default
    private String name = "tom";

    private Date birthday;

}
